pub trait Key<T: Item> {
    fn into_boxed_slice(self) -> Box<[T]>;
}

impl<T, K> Key<T> for K
where
    T: Item,
    K: Into<Vec<T>>,
{
    fn into_boxed_slice(self) -> Box<[T]> {
        self.into().into_boxed_slice()
    }
}

pub trait Item: Clone + Eq + PartialEq + Ord + PartialOrd {}

impl<T: Clone + Eq + PartialEq + Ord + PartialOrd> Item for T {}
